home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm2.lha / SORGENTI5 / LEZIONE9d2.s / LEZIONE9d2.s
Text File  |  1995-10-23  |  5KB  |  175 lines

  1.  
  2. ; Lezione9d2.s    LOOP DI UNA BLITTATA CON ALTEZZA 6 LINEE E MODULI, in cui
  3. ;        azzeriamo anche tutto lo schermo ogni volta per evitare
  4. ;        che rimanga la "scia".
  5.  
  6.  
  7.     SECTION    CiriCop,CODE
  8.  
  9. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  10.  
  11. *****************************************************************************
  12.     include    "startup1.s"    ; Salva Copperlist Etc.
  13. *****************************************************************************
  14.  
  15.         ;5432109876543210
  16. DMASET    EQU    %1000001111000000    ; copper,bitplane,blitter DMA
  17.  
  18.  
  19. START:
  20. ;    Puntiamo la PIC "vuota"
  21.  
  22.     MOVE.L    #BITPLANE,d0    ; dove puntare
  23.     LEA    BPLPOINTERS,A1    ; puntatori COP
  24.     move.w    d0,6(a1)
  25.     swap    d0
  26.     move.w    d0,2(a1)
  27.  
  28.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  29.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  30.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  31.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  32.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  33.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  34.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  35.  
  36.     lea    bitplane,a0    ; indirizzo bitplane destinazione
  37.     move.w    #(150-6)-1,d7    ; -6 perche' la figura e' alta 6 linee,
  38.                 ; percui "arriva" 6 linee piu' in basso di
  39.                 ; dove si blitta.
  40. BlitLoop:
  41.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  42.     MOVE.L    #$10800,d2    ; linea da aspettare = $108
  43. Waity1:
  44.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  45.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  46.     CMPI.L    D2,D0        ; aspetta la linea $108
  47.     BNE.S    Waity1
  48. Waity2:
  49.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  50.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  51.     CMPI.L    D2,D0        ; aspetta la linea $108
  52.     Beq.S    Waity2
  53.  
  54.     btst    #6,2(a5) ; dmaconr
  55. WBlit1:
  56.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  57.     bne.s    wblit1
  58.  
  59. ;    Cancellazione dello schermo
  60.  
  61.     move.w    #$0100,$40(a5)        ; BLTCON0 - accende solo il canale D,
  62.                     ; questo provoca la cancellazione della
  63.                     ; DESTINAZIONE, dato che non c'e' la
  64.                     ; sorgente!!!
  65.     move.w    #$0000,$42(a5)        ; BLTCON1 lo spieghiamo in seguito
  66.     move.w    #$0000,$66(a5)        ; BLTDMOD = 0, infatti le righe
  67.                     ; del bitplane sono disposte
  68.                     ; consecutivamente in memoria
  69.  
  70.     move.l    #bitplane,$54(a5)    ; BLTDPT - destinazione (bitplane)
  71.     move.w    #(64*256)+20,$58(a5)    ; BLTSIZE - alt.256 linee, largh. 20 w.
  72.                     ; cancella TUTTO LO SCHERMO, infatti
  73.                     ; le linee sono 256, (64*256) e i
  74.                     ; byte per linea sono 40 (20 words)
  75.  
  76.     btst    #6,2(a5) ; dmaconr
  77. WBlit2:
  78.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  79.     bne.s    wblit2
  80.  
  81. ;    Copia della figura
  82.  
  83. ;      ...........
  84. ;    .· ...  ...  :
  85. ;    |.·   ··   ·.|
  86. ;    l_____  _____|
  87. ;     | `°',.`°'  |
  88. ;     | _________ |
  89. ;     |    T¯l¯T  |
  90. ;     l___ `---'__|xCz
  91. ;        `------'
  92.  
  93.     move.w    #$ffff,$44(a5)        ; BLTAFWM lo spieghiamo in seguito
  94.     move.w    #$ffff,$46(a5)        ; BLTALWM lo spieghiamo in seguito
  95.     move.w    #$09f0,$40(a5)        ; BLTCON0 (usa A+D)
  96.     move.w    #$0000,$42(a5)        ; BLTCON1 lo spieghiamo in seguito
  97.     move.w    #0,$64(a5)        ; BLTAMOD (=0)
  98.     move.w    #36,$66(a5)        ; BLTDMOD (40-4=36)
  99.     move.l    #figura,$50(a5)        ; BLTAPT  (fisso alla figura sorgente)
  100.     move.l    a0,$54(a5)        ; BLTDPT  (dest: linee di schermo)
  101.     move.w    #(64*6)+2,$58(a5)    ; BLTSIZE (via al blitter !)
  102.                     ; adesso, blitteremo una figura di
  103.                     ; 2 word X 6 linee con una sola
  104.                     ; blittata dai moduli opportunamente
  105.                     ; settati correttamente per lo schermo.
  106.  
  107.     add.w    #40,a0            ; andiamo a blittare alla prossima
  108.                     ; linea nel prossimo loop.
  109.     dbra    d7,blitloop
  110.  
  111. mouse:
  112.  
  113.     btst    #6,$bfe001    ; mouse premuto?
  114.     bne.s    mouse
  115.  
  116.     btst    #6,2(a5) ; dmaconr
  117. WBlit3:
  118.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  119.     bne.s    wblit3
  120.  
  121.     rts
  122.  
  123. ;****************************************************************************
  124.  
  125.     SECTION    GRAPHIC,DATA_C
  126.  
  127. COPPERLIST:
  128.     dc.w    $8E,$2c81    ; DiwStrt
  129.     dc.w    $90,$2cc1    ; DiwStop
  130.     dc.w    $92,$38        ; DdfStart
  131.     dc.w    $94,$d0        ; DdfStop
  132.     dc.w    $102,0        ; BplCon1
  133.     dc.w    $104,0        ; BplCon2
  134.     dc.w    $108,0        ; Bpl1Mod
  135.     dc.w    $10a,0        ; Bpl2Mod
  136.  
  137.     dc.w    $100,$1200    ; Bplcon0 - 1 bitplane lowres
  138.  
  139. BPLPOINTERS:
  140.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  141.  
  142.     dc.w    $0180,$000    ; color0
  143.     dc.w    $0182,$eee    ; color1
  144.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  145.  
  146. ;****************************************************************************
  147.  
  148. ; Definiamo in binario la figura, che e' larga 16 bits, ossia 2 words, e alta
  149. ; 6 linee
  150.  
  151. Figura:
  152.     dc.l    %00000000000000000000110001100000
  153.     dc.l    %00000000000000000011000110000000
  154.     dc.l    %00000000000000001100011000000000
  155.     dc.l    %00000110000000110001100000000000
  156.     dc.l    %00000001100011000110000000000000
  157.     dc.l    %00000000011100011000000000000000
  158.  
  159. ;****************************************************************************
  160.  
  161.     SECTION    PLANEVUOTO,BSS_C    
  162.  
  163. BITPLANE:
  164.     ds.b    40*256        ; bitplane azzerato lowres
  165.  
  166.     end
  167.  
  168. ;****************************************************************************
  169.  
  170. In questo esempio miglioriamo il precedente lezione9d1.s.
  171. La figura ora non lascia piu' la scia, perche' cancelliamo ogni volta l'intero
  172. schermo. In realta' e' un po' troppo cancellare tutto lo schermo, basterebbe
  173. cancellare il rettangolino interessato. Comunque finziona!
  174.  
  175.